package bma.common.langutil.xdom.bean;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import bma.common.langutil.bean.AccessType;
import bma.common.langutil.bean.BeanObjectProperty;
import bma.common.langutil.bean.BeanSystem;
import bma.common.langutil.bean.BeanUtil;
import bma.common.langutil.xdom.Xdom;
import bma.common.langutil.xdom.core.XdomObject;

public class Xdom4Bean extends XdomObject {

	private BeanSystem beanSystem;

	public Xdom4Bean() {
		super();
		this.beanSystem = BeanSystem.getInstance();
	}

	public Xdom4Bean(BeanSystem beanSystem) {
		super();
		this.beanSystem = beanSystem;
	}

	@Override
	public Map<String, Xdom> createProperties(Object value) {
		Map<String, Xdom> r;
		List<BeanObjectProperty> list = new ArrayList<BeanObjectProperty>();
		BeanUtil.listProperties(beanSystem, value.getClass(), list);
		r = new HashMap<String, Xdom>(list.size());
		for (BeanObjectProperty p : list) {
			if (p.accessible(AccessType.GET)) {
				String n = p.getName();
				Object v = p.get(value);
				if (v != null) {
					r.put(n, bind(v));
				}
			}
		}
		return r;
	}

}
